import { GameInitInfo } from "../GameInterferce";
import Context from "./Context";

// 定义状态接口
interface State {
    frameClock: NodeJS.Timeout | null;
    handle(context: Context): void;
}

// 具体状态类
class ConcreteClickCoin implements State {
    frameClock: NodeJS.Timeout | null = null;

    handle(context: Context): void {
        if (context.stepIndex >= 10) {
            context.setState(new ConcreteGameEnd());
        } else {
            //  设置玩家状态和金币状态，接受玩家选择数据，10s切换到pk状态
            context.game.sendPKData();

            this.frameClock = setInterval(() => {
                clearInterval(this.frameClock!);
                context.setState(new ConcreteAniPK());
                context.request();

            }, 10000);
        }



    }
}

class ConcreteAniPK implements State {
    frameClock: NodeJS.Timeout | null = null;
    handle(context: Context): void {
        //  设置PK状态，并发送pk数据，10s切换到click状态


        context.game.sendPKResult();
        this.frameClock = setInterval(() => {

            // 计算结果
            context.game.resertSlickData()

            clearInterval(this.frameClock!);
            context.stepIndex++;
            context.setState(new ConcreteClickCoin());
            context.request();

        }, 10000);
    }
}

class ConcreteGameEnd implements State {
    frameClock: NodeJS.Timeout | null = null;
    handle(context: Context): void {
        context.setState(null);
    }
}

export default {
    ConcreteClickCoin,
    ConcreteAniPK,
    ConcreteGameEnd
}


